/**
 * 1576. 乘积为正数的最长子数组长度
 */
public class Exerciser4 {
    public int getMaxLen(int[] nums) {
        int n = nums.length;
        int[] f = new int[n + 1]; // 乘积为正的最大的非空连续 子数组
        int[] g = new int[n + 1]; // 乘积为负的最大的非空连续 子数组
        // f和g中是长度而非是乘积的值，所以这里需要初始化为0
        f[0] = g[0] = 0;
        int ret = Integer.MIN_VALUE;
        for(int i = 1;i <= n;i++) {
            // 当 nums[i] = 0的时候f和g对应位置均为0，创建的时候就是0了。不用再处理
            if(nums[i - 1] > 0) {
                // f在nums[i - 1] > 0的时候f[i - 1]是否等于0都是在其基础上加1
                f[i] = f[i - 1] + 1;
                // g在nums[i - 1] > 0的时候g[i - 1]是否等于0得到的结果是不一样的，需要进行处理
                g[i] = g[i - 1] == 0 ? 0 : g[i - 1] + 1;
            }else if(nums[i - 1] < 0) {
                // f在nums[i - 1] < 0的时候g[i - 1]是否等于0得到的结果是不一样的，需要进行处理
                f[i] = g[i - 1] == 0 ? 0 : g[i - 1] + 1;
                // g在nums[i - 1] < 0的时候f[i - 1]是否等于0都是在其基础上加1，正数变相的乘一个负数
                g[i] = f[i - 1] + 1;
            }
            ret = Math.max(ret,f[i]);
        }
        return ret;
    }
}
